package com.kun.admin.authority.dao;

import com.github.pagehelper.Page;
import com.kun.admin.authority.model.RoleModel;
import com.kun.admin.authority.model.UserVo;
import com.kun.base.model.UserAndInfoModel;
import org.apache.ibatis.annotations.Param;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by Administrator on 2016/9/20 0020.
 */
public interface AuthorityUserDao {
    /**
     * 查询所有的用户
     * @return
     */
    Page<UserAndInfoModel> list();

    /**
     * 根据id查询用户
     * @param userId
     * @return
     */
    UserAndInfoModel queryUserById(Long userId);

    /**
     * 更新用户的基本信息
     * @param userAndInfoModel
     * @return
     */
    int updateBaseInfo(UserAndInfoModel userAndInfoModel);

    /**
     * 更新用户的邮箱文件路径
     * @param userId
     * @param fileName
     */
    void updateHeadImagePath(@Param("userId") Long userId, @Param("fileName") String fileName);

    /**
     * 根据用户id获取头像路径
     * @param userId
     * @return
     */
    String queryHeadPath(Long userId);

    /**
     * 根据用户id修改用户密码
     * @param userId
     * @param newPassword
     * @return
     */
    int updatePwd(@Param("userId") Long userId, @Param("newPassword") String newPassword);

    long insertUser(UserAndInfoModel userAndInfoModel);

    long addUserInfo(UserAndInfoModel userAndInfoModel);

    /**
     * 根据用户名查找数据库里是否有该用户
     * @param userName
     * @return
     */
    List<String> hasName(@Param("userName") String userName);

    /**
     * 查询用户的角色
     * @param userId
     * @return
     */
    ArrayList<RoleModel> findUserRole(Long userId);

    /**
     * 为用户添加角色
     * @param userId
     * @param roleId
     * @return
     */
    int addRole(@Param("userId") Long userId,@Param("roleId") Long roleId);

    /**
     * 移除用户角色
     * @param userId
     * @param roleId
     * @return
     */
    int deleteRole(@Param("userId") Long userId,@Param("roleId") Long roleId);

    /**
     * 根据条件查询用户
     * @param userVo
     * @return
     */
    Page<UserAndInfoModel> findUserList(UserVo userVo);

    /**
     * 查询用户部门ID
     * @param userId
     * @return
     */
    List<Long> findUserDept(Long userId);

    /**
     * 删除用户所属的部门关系
     * @param userId
     */
    void deleteUderDept(Long userId);

    /**
     * 将用户添加至部门
     * @param userId
     * @param deptId
     */
    void addUserDept(@Param("userId") Long userId, @Param("deptId") Long deptId);

    /**
     * 删除用户
     * @param userId
     * @return
     */
    int deleteUser(Long userId);

    /**
     * 删除用户信息
     * @param infoId
     */
    void deleteUserInfo(Long infoId);

    /**
     * 查找用户头像路径
     * @param userId
     * @return
     */
    List<String> findHeadImagePath(Long userId);
}
